/***********************************************************************************
 * 文件名： lcd_config.h
 * 作者： 刘言
 * 版本： 1
 * 说明：
 * 		LCD驱动配置文件
 * 修改记录：
 * 	2024/01/10: 初版。 刘言。 
***********************************************************************************/
#ifndef _LCD_CONFIG_H_
#define _LCD_CONFIG_H_
#ifdef __cplusplus
 extern "C" {
#endif 

#include "board.h"

#define LCD_SIZE_X          80
#define LCD_SIZE_Y          160

// 颜色位数
// 1 - 单色
// 8 - 323RGB
// 16 - 565RGB
// 32 - 8888ARGB
// 仅 16 通过测试
#define LCD_COLOR_BITS      16
#if LCD_COLOR_BITS == 16
    // 1：高低字节颠倒，通常使用 8bit SPI 接口的LCD需要设置为1.
    #define LCD_COLOR_16_SWAP       1
#endif

// 初始化后的屏幕背景颜色
#define LCD_BG_COLOR        0x101010               // RGB颜色

// 1：显示开机LOGO，仅支持单色位图数据，从左到右逐行扫描，左侧高位。
#define LCD_SHOW_LOGO       0
    #define LCD_LOGO_TIME       2000            // LOGO显示时间ms（此时间死等阻塞）
    #define LCD_LOGO_SIZE_X     64
    #define LCD_LOGO_SIZE_Y     64
    #define LCD_LOGO_COLOR      0XFFFFFF        // RGB颜色
    #define LCD_LOGO_ICLUDE     "const_img.h"
    #define LCD_LOGO_BUFF       StartupLogo

// 定义表示启用一些LCD基本操作的API，比如显示字符、画线、画圆等。
#define LCD_USE_OPT_API
    // #define LCD_USE_CH_CHAR // 定义表示支持中文字符

// 定义表示使用自定义LCD初始化函数(被 Lcd_Init 调用)，不定义将使用内置的对应IC默认的初始化函数
// #define LCD_USE_CUSTOM_INIT_FUNC


// 需要实现的外部接口

// 端口初始化，将在 Lcd_Init 里最先被调用
// void _Lcd_PortInit()
#define _Lcd_PortInit()             // 已在 Board_Init 中统一初始化

// 设置RST（复位）端口输出电平，某些LCD可能不需要
// void _Lcd_SetRstLevel(bool level)
#define _Lcd_SetRstLevel(level)     //Board_SetLcdRstLevel(level)  

// 设置RS（命令/数据）端口输出电平
// void _Lcd_SetRsLevel(level)
#define _Lcd_SetRsLevel(level)      Board_SetLcdRsLevel(level)

// 背光开，如果自行控制背光，可以留空。
#define _Lcd_BkLightOn()            Board_SetLcdBrLevel(1)

// 背光关，如果自行控制背光，可以留空。
#define _Lcd_BkLightOff()           Board_SetLcdBrLevel(0)

// 数据端口写数据，注意需要处理片选端口，可以是异步处理
// void _Lcd_PortWrite(u8 *data_ptr, u32 len)
#define _Lcd_PortWrite(data_ptr, len)   \
{   \
    Board_StartLchSpiCs();  \
    Board_LcdSpiSend(data_ptr, len); \
    Board_StopLchSpiCs();   \
}

// 端口查忙。返回true表示数据端口繁忙。如果是同步通信，设置为false。
// bool _Lcd_PortBusy()
#define _Lcd_PortBusy()         false   //Spi_IsBusy()    

// 毫秒级延时，仅在 Lcd_Init 中被调用
// void _Lcd_Delayms(u16 ms)
#define _Lcd_Delayms(ms)        Delay_ms(ms)

#ifdef LCD_USE_CUSTOM_INIT_FUNC
#define _Lcd_ChipInit()
#endif

#ifdef __cplusplus
}
#endif 
#endif
